<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Redux</title>
<script src="../../s/redux/4.0.5/redux.min.js"></script>
</head>
<body>
	<script>
		// 这是一个 reducer，形式为 (state, action) => state 的纯函数。
		// 描述了 action 如何把 state 转变成下一个 state。
		// state 可以是基本类型、数组、对象。惟一的要点是当 state 变化时需要返回全新的对象，而不是修改传入的参数。
		function counter(state, action) {
			state = state || 0;
			switch (action.type) {
			case 'INCREMENT':
				return state + 1;
			case 'DECREMENT':
				return state - 1;
			default:
				return state;
			}
		}

		// 创建 Redux store 来存放应用的状态。
		// API 是 { subscribe, dispatch, getState }。
		var store = Redux.createStore(counter);

		// 可以手动订阅更新，也可以事件绑定到视图层。
		store.subscribe(function() {
			console.log(store.getState())
		});

		// 改变内部 state 惟一方法是 dispatch 一个 action。
		// action 可以被序列化，用日记记录和储存下来，后期还可以以回放的方式执行
		store.dispatch({
			type : 'INCREMENT'
		});
		// 1
		store.dispatch({
			type : 'INCREMENT'
		});
		// 2
		store.dispatch({
			type : 'DECREMENT'
		});
		// 1
	</script>
</body>
</html>